package com.mytijian.openapi.core.client;

import java.util.List;

import com.mytijian.openapi.adapter.dingding.result.UserInfo;
import com.mytijian.openapi.core.client.param.BookParam;
import com.mytijian.openapi.core.client.param.ChangeExamDateParam;
import com.mytijian.openapi.core.client.param.RegisterParam;
import com.mytijian.openapi.core.client.result.BaseResult;
import com.mytijian.openapi.core.client.result.BookResult;
import com.mytijian.openapi.core.client.result.CounterResult;
import com.mytijian.openapi.core.client.result.HospitalListResult;
import com.mytijian.openapi.core.client.result.MealInfo;
import com.mytijian.openapi.core.client.result.MealListResult;
import com.mytijian.openapi.core.client.result.OrderListResult;
import com.mytijian.openapi.core.client.result.RegisterResult;
import com.mytijian.openapi.core.model.AppConfig;

public interface IOpenAPIClient {

	/**
	 * 获取 accessToken
	 * 
	 * @param baseUrl
	 * @param appKey
	 * @param appSecret
	 * @return
	 */
	String getAccessToken(AppConfig config);

	String nonce(AppConfig config);

	/**
	 * 用户注册
	 * 
	 * @return
	 */
	RegisterResult register(AppConfig config, RegisterParam param);

	/**
	 * 用户注册
	 * 
	 * @return
	 */
	RegisterResult updateUserInfo(AppConfig config, RegisterParam param);

	HospitalListResult listHospital(AppConfig config);

	/**
	 * 开放平台套餐详情接口
	 * 
	 * @param baseUrl
	 * @param accessToken
	 * @param mealId
	 * @return
	 */
	MealListResult getMeals(AppConfig config, Integer mealId);

	/**
	 * 实现开放平台的人数接口
	 * 
	 * @param baseUrl
	 * @param accessToken
	 * @param hosptailId
	 * @param startDate
	 * @param endDate
	 * @return
	 */
	CounterResult getCounter(AppConfig config, Integer hosptailId, String startDate, String endDate);

	/**
	 * 开放平台下单接口
	 * 
	 * @param baseUrl
	 * @param accessToken
	 * @param signKey
	 * @param param
	 * @return
	 */
	BookResult book(AppConfig config, BookParam param);

	/**
	 * 开放平台撤单
	 */
	BaseResult revoke(AppConfig config, String orderNum);
	
	/**
	 * 
	 * @param config
	 * @param tmallProductId
	 * @return
	 */
	MealInfo getMealByTmallProductId(AppConfig config, String tmallProductId);

	OrderListResult getOrderStatus(AppConfig config, String orderNum);
	
	OrderListResult getOrderStatus(AppConfig config, List<String> orderNum);
	
	boolean isLive(AppConfig config);

	String getPDFExamReport(AppConfig config, String orderNum);
	
	BaseResult changeExamDate(AppConfig config, ChangeExamDateParam param);
	
	/**
	 * 用户信息
	 * @param openId
	 * @return
	 */
	UserInfo userInfo(AppConfig config, String openId);

	
}